package org.rails.core.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * 常用类，包含字符串和日期操作的常用的函数。
 * @author jack
 *
 */
public final class Utils {
	
	/**
	 * 格式化字符串，params将替换tarStr所有包含{Integer}内所有的标记。
	 * @param tarStr 要格式化的字符串。
	 * @param params 替换参数列表。
	 * @return 格式化完成的字符串，如果没包含{Integer}将返回tarStr。
	 */
	public static String format(String tarStr, Object... params) {
		tarStr = def(tarStr,"").toString();
		for (int i = 0; i < params.length; i++) {
			params[i] = def(params[i],"").toString().replace("\\$", "\\\\\\$");
			tarStr = tarStr.replace("{" + i + "}", def(params[i],"").toString());
		}
		return tarStr;
	}
	
	/**
	 * 空对象替换函数，如果tarObj为空将被defObj替换。
	 * @param tarObj 目标对象。
	 * @param defObj 替换对象。
	 * @return 如果tarObj为空将返回defObj，否则返回tarObj。
	 */
	public static Object def(Object tarObj,Object defObj) {
		if (isEmpty(tarObj)) {
			return defObj;
		} else {
			return tarObj;
		}
	}
	
	/**
	 * 判断对象是否为空。
	 * @param tarObj 目标对象或者字符串。
	 * @return tarObj为空返回true，否则返回false。
	 */
	public static boolean isEmpty(Object tarObj){
		if(tarObj == null || tarObj.toString().trim().equals(""))
			return true;
		else
			return false;
	}
	
	/**
	 * 格式化日期对象
	 * @param date 日期对象。
	 * @param pattern 日期格式规则。
	 * @return 返回经过处理的字符串。
	 */
	public static String formatDate(Date date,String pattern){
		if(!isEmpty(date)){
			return new SimpleDateFormat(pattern).format(date);
		}else{
			return "";
		}
	}
	
	public static Date parseDateStr(String dateStr,String pattern) throws ParseException{
		if(!isEmpty(dateStr)){
			return new SimpleDateFormat(pattern).parse(dateStr);
		}else{
			return null;
		}
	}
	
	/**
	 * 处理html特殊字符，一般用于html内容。
	 * @param html html内容。
	 * @return 返回经过处理的html字符串。
	 */
	public static String escapeHTML(String html){
		if(isEmpty(html))
			return "";		
		return html.replace("&","&amp;").replace("\"","&quot;")
			.replace("<","&lt;").replace(">","&gt;").replace(" ","&nbsp;");
	}
	
	/**
	 * 获得Map的key集合。
	 * @param map 目标Map。
	 * @return 目标map的key列表。
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static List getKeys(Map map){
		final List keys = new ArrayList();
		for (Iterator iterator = map.keySet().iterator(); iterator
				.hasNext();) {
			keys.add(iterator.next());		
		}
		return keys;
	}

}
